package cn.edu.swu.lyt;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 留言数据存储工具类
 * 负责留言数据的保存和加载
 */
public class MessageStorage {
    // 数据文件路径
    private static final String DATA_FILE = "messages.dat";

    /**
     * 保存留言列表到文件
     */
    public static void saveMessages(List<Message> messages) {
        String filePath = getDataFilePath();

        try (ObjectOutputStream oos = new ObjectOutputStream(
                new FileOutputStream(filePath))) {

            oos.writeObject(messages);
            System.out.println("留言数据已保存到: " + filePath + ", 共 " + messages.size() + " 条留言");

        } catch (IOException e) {
            System.err.println("保存留言数据失败: " + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 从文件加载留言列表
     */
    @SuppressWarnings("unchecked")
    public static List<Message> loadMessages() {
        String filePath = getDataFilePath();
        File file = new File(filePath);

        // 如果文件不存在，返回空列表
        if (!file.exists()) {
            System.out.println("数据文件不存在，将创建新的留言列表");
            return new ArrayList<>();
        }

        try (ObjectInputStream ois = new ObjectInputStream(
                new FileInputStream(filePath))) {

            List<Message> messages = (List<Message>) ois.readObject();
            System.out.println("从文件加载留言数据成功: " + messages.size() + " 条留言");
            return messages;

        } catch (IOException | ClassNotFoundException e) {
            System.err.println("加载留言数据失败: " + e.getMessage());
            // 如果加载失败，返回空列表
            return new ArrayList<>();
        }
    }

    /**
     * 获取数据文件完整路径
     */
    private static String getDataFilePath() {
        // 获取Web应用的根目录路径
        String webRootPath = System.getProperty("catalina.base") + "/webapps/";
        String contextPath = System.getProperty("message_board.context", "message_board");

        File dataDir = new File(webRootPath + contextPath + "/WEB-INF/data");
        if (!dataDir.exists()) {
            dataDir.mkdirs(); // 创建数据目录
        }

        return dataDir.getAbsolutePath() + "/" + DATA_FILE;
    }

    /**
     * 备份留言数据（可选功能）
     */
    public static void backupMessages(List<Message> messages) {
        String backupPath = getDataFilePath() + ".backup";

        try (ObjectOutputStream oos = new ObjectOutputStream(
                new FileOutputStream(backupPath))) {

            oos.writeObject(messages);
            System.out.println("留言数据已备份到: " + backupPath);

        } catch (IOException e) {
            System.err.println("备份留言数据失败: " + e.getMessage());
        }
    }
}